home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / T-TPUG Old Monthly Disks / (c)t8.d64 / random music.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  2KB  |  92 lines

  1. 70  PRINT"[147]"
  2. 80 POKE 53280,5:POKE 53281,1:POKE 646,14
  3. 90 S=54272
  4. 95 FOR I=0 TO 24:POKES+I,0:NEXT
  5. 98 Q=RND(-TI)
  6. 100 PRINT"[147]"
  7. 110 PRINT"          RANDOM MUSIC
  8. 120 [153]"     WRITTEN BY ARNOLD MENGEL
  9. 125 PRINT
  10. 130 PRINT"  (PET VERSION: 15 APRIL 1981)
  11. 150 [153]" (C-64 VERSION: 25 JANUARY 1984)"
  12. 160 [153]
  13. 170 [153]"   THIS PROGRAM WILL OUTPUT RATHER
  14. 180 PRINT"PLEASANT RANDOM MUSIC AND PRINT
  15. 190 [153]"ON THE SCREEN THE NOTES AND THEIR
  16. 200 PRINT"DURATION.
  17. 220 [153]
  18. 230 [153]"   AFTER LISTENING TO A FEW
  19. 240 PRINT"MELODIES, TRY CHANGING THE
  20. 250 [153]"FREQUENCY DISTRIBUTIONS OF THE
  21. 260 PRINT"NOTE SHIFTS (LINES 430-480)
  22. 270 [153]"AND THE NOTE DURATIONS
  23. 280 PRINT"(LINES(520-542).
  24. 281 [153]
  25. 284 [153]"
  26. 285 PRINT"  HIT ANY KEY TO START MUSIC.
  27. 286 [153]"  H F1 TO QUIT
  28. 287 GETA$:IF A$="" THEN GOTO 287
  29. 288 REM   **START OF PROGRAM**
  30. 289 :
  31. 290 PRINT"[147]"
  32. 300 PRINT"****RANDOM MUSIC--PUSH F1 TO QUIT****"
  33. 310 PRINT:PRINT:PRINT:PRINT
  34. 320 FOR I=1 TO 8:READ N(I):NEXT
  35. 330 FOR I=1TO8:READO(I):NEXT:REM FREQ.
  36. 340  FOR I=1TO8:READM$(I):NEXT:REM NOTE
  37. 350 DATA 142,24,210,195,208,30,95,29
  38. 360 DATA 12,14,15,16,18,21,22,25
  39. 361 DATA G,A,B,C,D,E,F,G
  40. 364 POKE S+13,240:
  41. 365 POKE S+9,255:POKE S+10,0
  42. 366 POKE S+2,255:POKE S+3,0
  43. 368 POKE S+6,240:POKE S+24,15
  44. 369 N=2:K=0:Z=0
  45. 370 POKE S+5,15
  46. 375 POKE S+12,15
  47. 390 I=4:A=3:M= 50*A:J=1
  48. 400 POKE S+24,0
  49. 401 POKE S+4,1+16*(2^N)
  50. 402 POKE S+11,1+16*(2^K)
  51. 404 POKE S+7,N(1):POKE S+ 9,O(1)
  52. 405 POKES,N(4):POKE S+1,O(4):POKE S+24,15:FOR Z=1TO 50*A:NEXT:PRINT"C";A,:
  53. 420 X=RND(1): REM DETERMINE NOTE SHIFT
  54. 430 IF X<.25THEN I=I+1:GOTO490
  55. 440   IF X<.50THEN I=I-1:GOTO490
  56. 450   IF X<.65 THEN I=I+2:GOTO490
  57. 460   IF X<.8 THEN I=I-2:GOTO490
  58. 470   IF X<.90 THEN I=I+3:GOTO490
  59. 480   I=I-3
  60. 490   IF I<1 THEN I=4:
  61. 500   IF I>8 THEN I=5
  62. 502 J=I-2
  63. 504 IF J<1 THEN J=I
  64. 506 IF J=2 THEN J=1
  65. 510 :     REM  DETERMINE NOTE DURATION
  66. 520 X=RND(1):IFX<.50 THEN Y=50 :GOTO550
  67. 530   IFX<.75 THEN Y=100:GOTO550
  68. 540   IF A =3 THEN Y=150:GOTO550
  69. 541   IF X<.87 THEN Y=150:GOTO550
  70. 542   Y=200
  71. 550   IFY>M THEN Y=M
  72. 560 Z=Z+Y:M=M-Y
  73. 570 IF M>1 THEN GOTO 600
  74. 580 Z=0:M=50 *A
  75. 590 :
  76. 600 PRINT M$(I);Y/50,
  77. 602 POKE S+7,N(J):POKE S+8,O(J)
  78. 605 POKE S,N(I):POKE S+1,O(I):FOR Z=0TOY:NEXT
  79. 610 IF PEEK(197)= 4   THENGOTO680
  80. 620 IF T>40 AND(I=3 OR I=5)THEN GOTO640
  81. 630 T=T+1:GOTO 420
  82. 635 POKE S+7,N(1) :POKE S+8,O(1)
  83. 640 POKE S,N(4):POKE S+1,O(4):PRINT"C";3*A,:FORZ=1TO150*A:NEXT:REM END OF MELODY
  84. 645 POKE S+11,16*(2^K)
  85. 650 POKES+4,16*(2^N):PRINT" ";3*A:FORZ=1TO150*A:NEXT:PRINT
  86. 655 N=N+1: IF N>2 THEN N=1
  87. 661 IF RND(1)<.5 THEN A=4:GOTO 665:REM DETERMINE WHETHER 3/4 OR4/4 TIME
  88. 662 A=3
  89. 665 M=50*A
  90. 670 T=0:I=4: GOTO400:REM START NEXT MELODY
  91. 680 FOR I=0 TO 24:POKES+I,0:NEXT
  92.